Amazon Athena for Apache Sparkをコンソールから使ってみよう!
データアナリティクス事業本部の鈴木です。
re:Invent2022にて発表されたAmazon Athena for Apache Sparkですが、コンソールから利用する際に使う各種画面や気をつけたいポイントについてまとめてみました。
Amazon Athena for Apache Sparkとは
re:Invent2022にて発表されたAmazon Athenaの機能です。Jupyter Notebookと互換性があるAthenaノートブックをインターフェースに、Apache Sparkを使ってインタラクティブにデータの分析を行うことができるというものです。
発表時にはDevelopersIOで速報記事を公開していて、その中でサンプルノートブックを例に、どんなことができそうか解説していました。今回は自分でも実際に触ってみて、自分が使っていく上で気になった細かいところまで確認したので、ご紹介します。
Amazon Athena for Apache Sparkとは何なのかについては、発表に合わせて公開された以下のAmazon Web Servicesブログも併せてご確認ください。Apache Sparkを実行できるサービスとしては、ほかにもAWS Glueがありますが、Amazon Athena for Apache Sparkはよりインタラクティブにデータに対して洞察を得られることに重点を置いているようです。Apache SparkのリソースはAthena側で管理してくれるので、ユーザーがインフラストラクチャのプロビジョニング・構成・保守を行う必要がないのもポイントです。
料金について
Amazon Athenaの料金ページによると、記事執筆時点でApache Sparkのコード実行に関する料金は以下のように記載されています。
1 秒あたりの DPU 時間ごとに請求される 0.50USD。Amazon Athena ノートブックを追加料金なしで提供。
Sparkセッションが続いている間に消費されたDPU (Data Processing Unit) の数に基づいて課金が発生します。課金は1秒単位で課金され、最も近い秒単位に切り上げられます。
料金ページによると、記事執筆時点では、Amazon Athena for Apache Sparkでは以下の3つのコンピューティングリソースが登場することが説明されています。
まず、セッションを開始すると以下の2つが起動します。
1. ノートブックユーザーインターフェースのサーバーとして機能するノートブックノード
2. Sparkアプリケーションを調整してすべてのSparkワーカーノードと通信するSparkドライバノード
ノートブックでセルを実行するなどして、Sparkアプリケーションを実行すると、以下のリソースが起動します。
3. Sparkワーカーノード
課金対象となるのは2と3です。アプリケーションの実行が完了すると瞬時にリソースを自動でスケールダウンするため、アイドル料金を最小限に抑えられるそうです。特に、Sparkセッションが終了すると、ドライバ、任意のワーカーノード、ノートブックノードが解放されるため、セッションが続いているかどうかに留意して利用するのが良さそうです。
料金例の『例2 - Apache Spark アプリケーション』が分かりやすく正確に理解できるので引用※します。
※ 2023/03/27時点でAmazon Athenaの料金ページ(https://aws.amazon.com/jp/athena/pricing/)より引用しました。
使ってみた
ワークグループを作成する
まず、Apache Sparkをエンジンとして選択したワークグループを作成します。Amazon Athenaのコンソールで、管理
からワークグループ
を選び、ワークグループの画面でワークグループを作成
を押します。
今回は、ワークグループ名を入力し、分析エンジンにApache Sparkを選択しました。IAMロールと計算結果を置くS3バケットは新しく作成しました。
ワークグループを作成
を押すと、作成が完了します。
このとき、サンプルノートブックをオンにする
にチェックを入れました。これをチェックしておくことで、このワークグループにサンプルノートブックがアップロードされ、そのノートブック内でアクセスするS3のサンプルデータに対する許可がアタッチされます。
サンプルデータに対するアクセス許可については、後からできたIAMロールを確認すると、AWSAthenaSparkDemoPolicy
というプレフィクスのポリシーがアタッチされていることが分かります。
AWSAthenaSparkRolePolicy
というプレフィクスのポリシーはAmazon Athena for Apache Sparkの機能を利用するための最低限の権限のみ定義しており、サンプルノートブックからS3のデータを取得するための権限をAWSAthenaSparkDemoPolicy
というプレフィクスの別のポリシーの方で定義し、ロールにアタッチしています。後述しますが、自分で用意したデータセットを利用したい場合は、このようにして別途権限をつける必要があることを覚えておきましょう。
ワークグループの作成が完了したら、ノートブックエディタ画面を開き、ワークグループを選択すると、サンプルノートブックができていることが分かります。
セッションの開始と詳細の編集をする
サンプルノートブックをクリックすると、早速ノートブックが開き、セッションが開始されます。
ページ上部にデフォルトのパラメータ(20個の最大DPU)を使用して新しいセッションが開始しました。
と記載があります。消費したDPU数は料金に影響するので、念の為設定を編集の方法を確認してみます。 セッションを編集
をクリックするか、Session
メニューからEdit session
をクリックします。
するとセッションの詳細の編集
がポップアップされるので変えたいパラメータを修正して保存
を押します。
この詳細の編集については、ユーザーガイドの開始方法ページに、セッションの詳細を編集するのセクションがあるので、詳しく知りたい方はご確認ください。
最大同時実行数はデフォルトは20DPUで3~60DPUまで選ぶことができました。最大同時実行数はAthenaが必要とした場合に自動で割り当てようとするリソース量の上限を指定します。大きい値を選んだからといって必ずしもその値を消費するわけではないのと、計算が終わるまでにかかるDPUは結果的にはほぼ同じかドライバーノード分高くなると考えられるので、小さくしたからといってトータルのコストが安くなるわけではありませんが、意図せず巨大な計算を実行したときに一気にDPUを使ってしまう可能性はあるので、まずは検証でいろいろ触りたいという方は小さめにしておくと安心かもしれません。逆に大きいデータセットを意図して処理したい場合に速度が出ないときはこの設定を修正すれば割り当てられるDPUを大きくすることができます。
セッションを停止する
課金に関わることなので、先にセッションの停止についても確認しておきます。
セッションを明示的に停止する場合は、Session
メニューからTerminate
を押します。
セッション終了の確認のためのポップアップが出るので確認
を押します。
ユーザーガイドの開始方法ページに、セッションの終了のセクションがあるので、詳しく知りたい方はご確認ください。ノートブックエディタのノートブックタブを閉じても、アクティブなノートブックのセッションは自動的には終了しないので、確実に終了させたい場合はこの操作が必要であることが注記されています。
本当にセッションが停止されているかはノートブックエクスプローラーからもみられるので、以降のセクションで紹介します。
ノートブックから計算を実行する
先にセッションの停止方法を紹介しましたが、このセクションで紹介するのはノートブックに記載したコードの実行方法です。
AthenaノートブックはJupyter Notebookと互換性があり、同じような操作感で扱うことができました。例えばノートブック上部にはメニューのアイコンがあり、Run
ボタンでセルを実行することもできますし、Shift+Enter
で現在のセルを実行して下に新しいセルを作るようなこともできます。
Athenaノートブックエディタの使用方法については、以下のページにも記載があります。
マジックコマンドからApache Spark SQLステートメントを実行することができます。
マジックコマンドについては、以下のページに解説があるのでご確認ください。
ノートブックエクスプローラーの機能をみる
ノートブックエクスプローラーはワークグループ内のノートブックを管理することができます。
以下の、ユーザーガイドのノートブックファイルの管理ページから、ノートブックエクスプローラーでできることについて記載されいるのでご確認ください。
上に掲載した画面からも分かりますが、ノートブックの削除・作成・名前の変更・インポート・エクスポート・セッション履歴の確認ができます。
セッション履歴をみる
引き続き、ノートブックエクスプローラーの機能です。特に、セッション履歴からはセッションがどういう状態にあるのかや、実行履歴がみられるので紹介します。
セッション履歴を確認したいノートブックを選択し、セッション履歴
をクリックします。
セッション履歴がリストされるので、試しに最新のものをクリックしてみます。
以下のようにセッションの詳細が確認できます。特にステータス
を確認すると終了済み
となっており、確かにセッションが終了していることが分かります。
計算
から個別の計算IDをクリックすると、どのような計算を実行したかが確認できます。ちなみにこれは、サンプルノートブックでサンプルデータを読み込んだときの履歴です。
ノートブックをエクスポートする
引き続き、ノートブックエクスプローラーの機能です。実行して洞察を得たノートブックのエクスポートは、レポートとしてダウンロードしたくなるので、やり方を押さえておきました。
エクスポートしたいノートブックを選択し、ファイルをエクスポート
をクリックします。
するとローカルにノートブックがダウンロードされます。試しにVSCodeで開いてみると、確かにサンプルノートブックがダウンロードできていました。
拡張子は.ipynb
なので、マークダウンなどに変換したい場合は別途Jupyter Notebook環境で変換などが必要そうです。
CloudWatchメトリクスで計算に関連するメトリクスを確認する
ワークグループでPublish CloudWatch metricsオプションを有効にしている場合、CloudWatchメトリクスから計算に関連するメトリクスが見られるようになっているので、どのように確認できるかみてみました。
CloudWatchのコンソールから、全てのメトリクスを開くと、カスタム名前空間にAmazonAthenaForApacheSpark
の空間ができていました。
配下には、SessionIdおよびWorkGroupによるメトリクスと、WorkGroupのみに集約したメトリクスが確認できました。
試しにWorkGroupのみのメトリクスを確認すると、そのワークグループのDPUCountのメトリクスが確認できました。
自分のデータセットを分析したいとき
ワークグループを作成する際にも記載しましたが、例えば自分のデータセットをS3に置いて分析したい場合は、そのためのアクセス許可をワークグループに設定したIAMロールに設定する必要があります。
これについては別途記事にしましたので参照して頂ければと思います。
最後に
今回はAmazon Athena for Apache Sparkをコンソールから利用する際の使い方やポイントをご紹介しました。
Apache Sparkと聞くと、「使ったことなくて難しそうだし」と尻込みしてしまう方もいるかもしれませんが、AthenaノートブックエディタはJupyter Notebookと互換性があり、Jupyter Notebookを使ったことがある方は自然に利用できると思います。また、サンプルのノートブックをみればとても親切にApache Sparkを使ったデータの利用について記載されているので、初めての方もぜひサンプルノートブックからチャレンジして頂ければと思います。